/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tmPHA;

import ants.*;
import java.awt.Point;
import java.io.*;
import java.net.Socket;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.HashMap;

/**
 *
 * @author Sagrevyum
 */
public class cliente {

    static int foodRest;
    static GamePlay world;
    static LinkedList moves;
    static Memory reinfo;
    static Memory rMatriz;
    public static void main(String[] args) throws ClassNotFoundException, IOException {

        cliente client = new cliente();

    }

    cliente() throws ClassNotFoundException, IOException {
        try { 
            Socket socket = new Socket("localhost", 5000); 
            InputStream aux = socket.getInputStream();
            ObjectInputStream entradaObjetos = new ObjectInputStream(aux);
            OutputStream aux2 = socket.getOutputStream();
            ObjectOutputStream os = new ObjectOutputStream(aux2);

            // Leer estado inicial
            Inicial mapa;
            mapa = (Inicial) entradaObjetos.readObject();
            System.out.println("Recibi el mapa");
            Point origin=new Point();
            origin=mapa.hormiguero;
            ArrayList lista;
            lista = new ArrayList();
            int k = 1;          
            for (int x = 0; x < mapa.getExploradoras(); x++) {
                //System.out.println(" "+0+" "+mapa.m+" "+mapa.n+" "+k++);
                lista.add(new Hormiga(k++, 0,origin,Modo.Search));
            }
            for (int x = 0; x < mapa.getGuerreras(); x++) {
                lista.add(new Hormiga(k++, 1,origin,Modo.Search));
            }
            for (int x = 0; x < mapa.getObreras(); x++) {
                lista.add(new Hormiga(k++, 2,origin,Modo.Search));
            }
            reinfo=new Memory(lista,mapa.m,mapa.n);
            rMatriz=new Memory(lista,mapa.m,mapa.n);
            int conta=0;
            while (true) {
                // Recibir vistas
                FinalView vista;
                
                System.out.println("Recibi el FinalView");
                vista = (FinalView) entradaObjetos.readObject();
                //System.out.println("Recibi el FinalView");
                // Logica
                HashMap Conocimientos = vista.returnConocimientos();
                MoveList movimientos = new MoveList();
                ListIterator itr = lista.listIterator();
                
                while (itr.hasNext()) {
                    Hormiga ant = (Hormiga) itr.next();
                    Perspective p = (Perspective)vista.returnView().perspectiva.get(ant.id);
                    Perspective_k p2=(Perspective_k) vista.returnKnowledge().perspectiva.get(ant.id);
                    rMatriz.getMemory(ant.id).printEnv();//.printEnv();
                    Environment temp;
                    temp=new Environment(mapa.m,mapa.n);
                    temp=rMatriz.getMemory(ant.id);
                    rMatriz.setMemory(ant.id,ant.setR(temp, ant, p, p2));//ant.setR(rMatriz, ant.place, p, p2);
                    rMatriz.getMemory(ant.id).printEnv();
                    movimientos.agregar(new Move(ant.id, ant.getMovimiento(p,p2)));
                }
                // Mandar movimientos
                os.writeObject(movimientos);
                System.out.println("Mande los movimientos");
                HashMap Conocimientos_movidos = new HashMap();
                Conocimientos_movidos = (HashMap)entradaObjetos.readObject();
                try{
                    Thread.sleep (300);
                }catch(Exception e){
                        
                }
                //conta++;
            }
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}
